home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / M2Crypto / SMIME.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  9KB  |  283 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import BIO
  5. import EVP
  6. import X509
  7. import Err
  8. import util
  9. import m2
  10. PKCS7_TEXT = m2.PKCS7_TEXT
  11. PKCS7_NOCERTS = m2.PKCS7_NOCERTS
  12. PKCS7_NOSIGS = m2.PKCS7_NOSIGS
  13. PKCS7_NOCHAIN = m2.PKCS7_NOCHAIN
  14. PKCS7_NOINTERN = m2.PKCS7_NOINTERN
  15. PKCS7_NOVERIFY = m2.PKCS7_NOVERIFY
  16. PKCS7_DETACHED = m2.PKCS7_DETACHED
  17. PKCS7_BINARY = m2.PKCS7_BINARY
  18. PKCS7_NOATTR = m2.PKCS7_NOATTR
  19. PKCS7_SIGNED = m2.PKCS7_SIGNED
  20. PKCS7_ENVELOPED = m2.PKCS7_ENVELOPED
  21. PKCS7_SIGNED_ENVELOPED = m2.PKCS7_SIGNED_ENVELOPED
  22. PKCS7_DATA = m2.PKCS7_DATA
  23.  
  24. class PKCS7_Error(Exception):
  25.     pass
  26.  
  27. m2.pkcs7_init(PKCS7_Error)
  28.  
  29. class PKCS7:
  30.     m2_pkcs7_free = m2.pkcs7_free
  31.     
  32.     def __init__(self, pkcs7 = None, _pyfree = 0):
  33.         if pkcs7 is not None:
  34.             self.pkcs7 = pkcs7
  35.             self._pyfree = _pyfree
  36.         else:
  37.             self.pkcs7 = m2.pkcs7_new()
  38.             self._pyfree = 1
  39.  
  40.     
  41.     def __del__(self):
  42.         if getattr(self, '_pyfree', 0):
  43.             self.m2_pkcs7_free(self.pkcs7)
  44.         
  45.  
  46.     
  47.     def _ptr(self):
  48.         return self.pkcs7
  49.  
  50.     
  51.     def type(self, text_name = 0):
  52.         if text_name:
  53.             return m2.pkcs7_type_sn(self.pkcs7)
  54.         else:
  55.             return m2.pkcs7_type_nid(self.pkcs7)
  56.  
  57.     
  58.     def write(self, bio):
  59.         return m2.pkcs7_write_bio(self.pkcs7, bio._ptr())
  60.  
  61.     
  62.     def write_der(self, bio):
  63.         return m2.pkcs7_write_bio_der(self.pkcs7, bio._ptr())
  64.  
  65.     
  66.     def get0_signers(self, certs, flags = 0):
  67.         return X509.X509_Stack(m2.pkcs7_get0_signers(self.pkcs7, certs.stack, flags), 1)
  68.  
  69.  
  70.  
  71. def load_pkcs7(p7file):
  72.     bio = m2.bio_new_file(p7file, 'r')
  73.     if bio is None:
  74.         raise Err.get_error()
  75.     
  76.     
  77.     try:
  78.         p7_ptr = m2.pkcs7_read_bio(bio)
  79.     finally:
  80.         m2.bio_free(bio)
  81.  
  82.     if p7_ptr is None:
  83.         raise Err.get_error()
  84.     
  85.     return PKCS7(p7_ptr, 1)
  86.  
  87.  
  88. def load_pkcs7_bio(p7_bio):
  89.     p7_ptr = m2.pkcs7_read_bio(p7_bio._ptr())
  90.     if p7_ptr is None:
  91.         raise Err.get_error()
  92.     
  93.     return PKCS7(p7_ptr, 1)
  94.  
  95.  
  96. def smime_load_pkcs7(p7file):
  97.     bio = m2.bio_new_file(p7file, 'r')
  98.     if bio is None:
  99.         raise Err.get_error()
  100.     
  101.     
  102.     try:
  103.         (p7_ptr, bio_ptr) = m2.smime_read_pkcs7(bio)
  104.     finally:
  105.         m2.bio_free(bio)
  106.  
  107.     if p7_ptr is None:
  108.         raise Err.get_error()
  109.     
  110.     if bio_ptr is None:
  111.         return (PKCS7(p7_ptr, 1), None)
  112.     else:
  113.         return (PKCS7(p7_ptr, 1), BIO.BIO(bio_ptr, 1))
  114.  
  115.  
  116. def smime_load_pkcs7_bio(p7_bio):
  117.     (p7_ptr, bio_ptr) = m2.smime_read_pkcs7(p7_bio._ptr())
  118.     if p7_ptr is None:
  119.         raise Err.get_error()
  120.     
  121.     if bio_ptr is None:
  122.         return (PKCS7(p7_ptr, 1), None)
  123.     else:
  124.         return (PKCS7(p7_ptr, 1), BIO.BIO(bio_ptr, 1))
  125.  
  126.  
  127. class Cipher:
  128.     
  129.     def __init__(self, algo):
  130.         cipher = getattr(m2, algo, None)
  131.         if cipher is None:
  132.             raise ValueError, ('unknown cipher', algo)
  133.         
  134.         self.cipher = cipher()
  135.  
  136.     
  137.     def _ptr(self):
  138.         return self.cipher
  139.  
  140.  
  141.  
  142. class SMIME_Error(Exception):
  143.     pass
  144.  
  145. m2.smime_init(SMIME_Error)
  146.  
  147. class SMIME:
  148.     
  149.     def load_key(self, keyfile, certfile = None, callback = util.passphrase_callback):
  150.         if certfile is None:
  151.             certfile = keyfile
  152.         
  153.         self.pkey = EVP.load_key(keyfile, callback)
  154.         self.x509 = X509.load_cert(certfile)
  155.  
  156.     
  157.     def load_key_bio(self, keybio, certbio = None, callback = util.passphrase_callback):
  158.         if certbio is None:
  159.             certbio = keybio
  160.         
  161.         self.pkey = EVP.load_key_bio(keybio, callback)
  162.         self.x509 = X509.load_cert_bio(certbio)
  163.  
  164.     
  165.     def set_x509_stack(self, stack):
  166.         self.x509_stack = stack
  167.  
  168.     
  169.     def set_x509_store(self, store):
  170.         self.x509_store = store
  171.  
  172.     
  173.     def set_cipher(self, cipher):
  174.         self.cipher = cipher
  175.  
  176.     
  177.     def unset_key(self):
  178.         del self.pkey
  179.         del self.x509
  180.  
  181.     
  182.     def unset_x509_stack(self):
  183.         del self.x509_stack
  184.  
  185.     
  186.     def unset_x509_store(self):
  187.         del self.x509_store
  188.  
  189.     
  190.     def unset_cipher(self):
  191.         del self.cipher
  192.  
  193.     
  194.     def encrypt(self, data_bio, flags = 0):
  195.         if not hasattr(self, 'cipher'):
  196.             raise SMIME_Error, 'no cipher: use set_cipher()'
  197.         
  198.         if not hasattr(self, 'x509_stack'):
  199.             raise SMIME_Error, 'no recipient certs: use set_x509_stack()'
  200.         
  201.         pkcs7 = m2.pkcs7_encrypt(self.x509_stack._ptr(), data_bio._ptr(), self.cipher._ptr(), flags)
  202.         if pkcs7 is None:
  203.             raise SMIME_Error, Err.get_error()
  204.         
  205.         return PKCS7(pkcs7, 1)
  206.  
  207.     
  208.     def decrypt(self, pkcs7, flags = 0):
  209.         if not hasattr(self, 'pkey'):
  210.             raise SMIME_Error, 'no private key: use load_key()'
  211.         
  212.         if not hasattr(self, 'x509'):
  213.             raise SMIME_Error, 'no certificate: load_key() used incorrectly?'
  214.         
  215.         blob = m2.pkcs7_decrypt(pkcs7._ptr(), self.pkey._ptr(), self.x509._ptr(), flags)
  216.         if blob is None:
  217.             raise SMIME_Error, Err.get_error()
  218.         
  219.         return blob
  220.  
  221.     
  222.     def sign(self, data_bio, flags = 0):
  223.         if not hasattr(self, 'pkey'):
  224.             raise SMIME_Error, 'no private key: use load_key()'
  225.         
  226.         if hasattr(self, 'x509_stack'):
  227.             pkcs7 = m2.pkcs7_sign1(self.x509._ptr(), self.pkey._ptr(), self.x509_stack._ptr(), data_bio._ptr(), flags)
  228.             if pkcs7 is None:
  229.                 raise SMIME_Error, Err.get_error()
  230.             
  231.             return PKCS7(pkcs7, 1)
  232.         else:
  233.             pkcs7 = m2.pkcs7_sign0(self.x509._ptr(), self.pkey._ptr(), data_bio._ptr(), flags)
  234.             if pkcs7 is None:
  235.                 raise SMIME_Error, Err.get_error()
  236.             
  237.             return PKCS7(pkcs7, 1)
  238.  
  239.     
  240.     def verify(self, pkcs7, data_bio = None, flags = 0):
  241.         if not hasattr(self, 'x509_stack'):
  242.             raise SMIME_Error, 'no signer certs: use set_x509_stack()'
  243.         
  244.         if not hasattr(self, 'x509_store'):
  245.             raise SMIME_Error, 'no x509 cert store: use set_x509_store()'
  246.         
  247.         p7 = pkcs7._ptr()
  248.         if data_bio is None:
  249.             blob = m2.pkcs7_verify0(p7, self.x509_stack._ptr(), self.x509_store._ptr(), flags)
  250.         else:
  251.             blob = m2.pkcs7_verify1(p7, self.x509_stack._ptr(), self.x509_store._ptr(), data_bio._ptr(), flags)
  252.         if blob is None:
  253.             raise SMIME_Error, Err.get_error()
  254.         
  255.         return blob
  256.  
  257.     
  258.     def write(self, out_bio, pkcs7, data_bio = None, flags = 0):
  259.         if data_bio is None:
  260.             return m2.smime_write_pkcs7(out_bio._ptr(), pkcs7._ptr(), flags)
  261.         else:
  262.             return m2.smime_write_pkcs7_multi(out_bio._ptr(), pkcs7._ptr(), data_bio._ptr(), flags)
  263.  
  264.  
  265.  
  266. def text_crlf(text):
  267.     bio_in = BIO.MemoryBuffer(text)
  268.     bio_out = BIO.MemoryBuffer()
  269.     if m2.smime_crlf_copy(bio_in, bio_out):
  270.         return bio_out.read()
  271.     else:
  272.         raise Err.get_error()
  273.  
  274.  
  275. def text_crlf_bio(bio_in):
  276.     bio_out = BIO.MemoryBuffer()
  277.     m2.smime_crlf_copy(bio_in, bio_out)
  278.     if m2.smime_crlf_copy(bio_in, bio_out):
  279.         return bio_out
  280.     else:
  281.         raise Err.get_error()
  282.  
  283.